﻿using System;

namespace TetrisGame
{
    /// <summary>
    /// 绘制对象类型枚举
    /// </summary>
    public enum E_DrawType
    {
        Score, // 分数
        NextTitle, // 下一个文字
        Wall, // 墙壁
        Block, // 方块
        Line, // 线
        TShape, // T形
        Left_LShape, // 左L形
        Right_LShape,// 右L形
        Left_ZShape, // 左Z形
        Right_ZShape, // 右Z形
    }

    internal class DrawObject : IDraw
    {
        public Position Pos { get; set; } // 绘制对象的位置
        public E_DrawType Type { get; set; } // 绘制对象类型

        // 构造函数, 带类型参数
        public DrawObject(E_DrawType drawType)
        {
            this.Type = drawType; // 设置绘制对象类型
        }

        // 构造函数，带有位置参数和类型参数
        public DrawObject(int x, int y, E_DrawType type) : this(type)
        {
            this.Pos = new Position(x, y); // 设置绘制对象位置
        }

        // 清除方块方法
        public void Clear()
        {
            if (Pos.y < 0) return; // 如果y坐标小于0，不绘制
            // 设置光标位置
            Console.SetCursorPosition(Pos.x, Pos.y);
            Console.Write(" "); // 清除方块
        }

        // 实现IDraw接口的Draw方法
        public void Draw()
        {
            if (Pos.y < 0) return; // 如果y坐标小于0，不绘制
            // 设置光标位置
            Console.SetCursorPosition(Pos.x, Pos.y);
            if (Type == E_DrawType.NextTitle)
            {
                Console.Write("Next: "); // 绘制下方文字
            }
            else if (Type == E_DrawType.Score)
            {
                Console.Write("Score: "); // 绘制分数文字
            }
            else
            {
                // 绘制类型对应的字符
                switch (Type)
                {
                    case E_DrawType.Wall:
                        Console.ForegroundColor = ConsoleColor.Red; // 墙壁颜色
                        break;

                    case E_DrawType.Block:
                        Console.ForegroundColor = ConsoleColor.Blue; // 方块颜
                        break;

                    case E_DrawType.Line:
                        Console.ForegroundColor = ConsoleColor.Cyan; // 线颜色
                        break;

                    case E_DrawType.TShape:
                        Console.ForegroundColor = ConsoleColor.Magenta; // T形颜色
                        break;

                    case E_DrawType.Left_LShape:
                    case E_DrawType.Right_LShape:
                        Console.ForegroundColor = ConsoleColor.Green; // 右L形颜色
                        break;

                    case E_DrawType.Left_ZShape:
                    case E_DrawType.Right_ZShape:
                        Console.ForegroundColor = ConsoleColor.Yellow; // 右Z形颜色
                        break;
                }
                Console.Write("■"); // 绘制方块
            }
        }

        // 切换方块类型
        public void ChangeType(E_DrawType newType)
        {
            this.Type = newType;
        }
    }
}